// data--->body的参数
// params--->query的参数是拼在浏览器地址上的
// Content-Type是axios自带的

import request from '@/utils/request.js'

// 既引入也同时向外按需导出, 所有引入过来的方法 (中转)
// * 代表所有
export * from './ArticleDetail.js'

// 获取所有频道
export const getAllChannelsAPI = () => request({ url: '/v1_0/channels', method: 'get' })
// 登录
// Path： /v1_0/authorizations Method： POST 参数：请求体参数： mobile code
export const loginAPI = ({ mobile, code }) => request({
  url: '/v1_0/authorizations',
  method: 'POST',
  data: {
    mobile,
    code
  }
})
// 获取用户的频道
// Path： /v1_0/user/channels Method： GET 无参数
export const getUserChannelsAPI = () => request({ url: '/v1_0/user/channels', method: 'get' })

// 删除指定用户频道
// Path： /v1_0/user/channels/:target  Method： DELETE  参数：路径参数 target
export const deleteArticleAPI = ({ target }) => request({
  url: `/v1_0/user/channels/${target}`,
  method: 'DELETE',
  data: {
    target
  }
})

// 新增用户频道
// Path：  /v1_0/user/channels Method： PATCH 参数：
// 请求体
// channels object [] 必须用户关注的频道列表 // item 类型: object
// ├─ id string 必须 频道id
// ├─ seq string 必须 顺序序号
// 这种参数的意思是，参数名为channels 类型为对象 对象里面的值为 id 和seq
export const updateChannelsAPI = ({ channels }) => request({
  url: '/v1_0/user/channels',
  method: 'PUT',
  data: {
    channels // 用户已选整个频道数组
  }
})

// 用户 刷新用户token
// Path： /v1_0/authorizations Method： PUT
export const getNewTokenAPI = () => request({
  url: '/v1_0/authorizations',
  method: 'PUT',
  headers: {
    Authorization: 'Bearer ' + localStorage.getItem('refresh_token')
    // request请求拦截器那里携带的是统一的token 而我们这里携带的是refresh_token 用来刷新token的
    // 所以请求这里加一个headers
    // 所以请求拦截器中的这句if (getToken()?.length > 0 && config.headers.Authorization === undefined)，就是为这种情况准备的
  }
})

// 用户 - 关注
// Path： /v1_0/user/followings Method： POST 参数：请求体参数 target
export const userFollowedAPI = ({ target }) => request({
  url: '/v1_0/user/followings',
  method: 'POST',
  data: {
    target
  }
})

// 用户 - 取消关注
// Path： /v1_0/user/followings/:target Method： DELETE  参数：路径参数：target
export const userUnFollowedAPI = ({ target }) => request({
  url: `/v1_0/user/followings/${target}`,
  method: 'DELETE'
})

// 用户-获取个人资料
// Path： /v1_0/user/profile Method： GET 无参数
export const userProfileAPI = () => request({
  url: '/v1_0/user/profile',
  method: 'get'
})

// 用户-获取基本信息
// Path： /v1_0/user Method： GET 无参数
export const userAPI = () => request({
  url: '/v1_0/user',
  method: 'get'
})

// 用户 - 更新头像
export const updateUserPhotoAPI = (fd) => request({
  url: '/v1_0/user/photo',
  method: 'PATCH',
  data: fd // fd外面一会儿传进来的new FormData() 表单对象

  // 如果你的请求体直接是FormData表单对象, 你也不用自己添加
  // Content-Type, axios发现数据请求体是表单对象, 它也不会转换成json字符串
  // 也不会带Content-Type: application/json, 而是交给浏览器, 浏览器发现请求体是formData会自己携带Content-Type

  // Content-Type: application/json; axios携带的, 前提: data请求体是对象 -> json字符串 -> 发给后台
  // Content-Type: multipart/form-data; 浏览器携带的, 前提: data请求体必须FormData类型对象
})

// 用户 - 更新基本资料
export const updateUserProfileAPI = ({ name = null, gender = 0, birthday = null, intro = null, real_name = null }) => request({
  url: '/v1_0/user/profile',
  method: 'PATCH', // PATCH局部更新->PUT(全都更新)
  data: {
    name,
    gender,
    birthday,
    intro,
    real_name
  }
})
// 用户 - 更新基本资料
// export const updateUserProfileAPI = (dataObj) => {
//   // 判断, 有值才带参数名给后台, 无值参数名不携带
//   // 写法1: 解构赋值, 4个判断, 往空对象上添加有值的加上去(以前做过)
//   // 写法2: 外面想传几对象key+value, 就直接传入交给后台
//   // 写法3: 上面写法不够语义化, 我看不出obj里有什么
//   const obj = {
//     name: '',
//     gender: 0,
//     birthday: '',
//     intro: ''
//   }
//   for (const prop in obj) { // 遍历参数对象里每个key
//     if (dataObj[prop] === undefined) { // 用key去外面传入的参数对象匹配, 如果没有找到(证明外面没传这个参数)
//       delete obj[prop] // 从obj身上移除这对属性和值
//     } else {
//       obj[prop] = dataObj[prop] // 如果使用了, 就从外面对象取出对应key值, 保存到obj上
//     }
//   }
//   return request({
//     url: '/v1_0/user/profile',
//     method: 'PATCH', // 局部更新->PUT(全都更新)
//     data: obj
//     // { // data不会忽略值为null的那对key+value, params遇到null值会忽略不携带此对参数和值给后台
//     //   name, // 昵称
//     //   gender, // 性别0:男, 1:女
//     //   birthday, // 生日(要求格式: 年-月-日 字符串)
//     //   intro // 个人介绍
//     // }
//   })
// }

// 文章 - 获取 - 评论列表
// Path： /v1_0/comments Method： GET 参数：query参数 type source offset limit
export const commentsListAPI = ({ source, offset, limit }) => request({
  url: '/v1_0/comments',
  method: 'GET',
  params: {
    type: 'a',
    source,
    offset,
    limit
  }
})
